export interface SortOrder {
  property: string;
  direction: Direction;
}

export enum Direction {
  ASC = 'ASC',
  DESC = 'DESC'
}
export type SortDirection = 'asc' | 'desc' | '';

/**
 * 根据传入的字符串排序顺序参数，解析出排序属性和方向。
 *
 * @param strSortOrder 排序顺序字符串，可以以'+'或'-'开头来指定升序或降序，无符号则默认为升序。
 * @returns 返回一个SortOrder对象，包含排序的属性和方向（升序或降序）。
 */
export function sortOrderFromString(strSortOrder: string): SortOrder {
  let property: string; // 将要排序的属性
  let direction = Direction.ASC; // 默认排序方向为升序

  // 检查字符串是否以'-'开头，若是则为降序排序
  if (strSortOrder.startsWith('-')) {
    direction = Direction.DESC;
    property = strSortOrder.substring(1); // 去掉'-'符号，获取属性名
  } else {
    // 检查字符串是否以'+'开头，若是则为升序排序，去掉'+'符号后处理相同
    if (strSortOrder.startsWith('+')) {
      property = strSortOrder.substring(1);
    } else {
      // 若字符串既不以'+'也不以'-'开头，则直接作为属性名
      property = strSortOrder;
    }
  }

  return {property, direction}; // 返回解析出的属性和排序方向
}
